package com.jacob.androidstudy.androidnote.broadcastreceiver;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;


/**
 * Android系统的消息机制是由底层实现和管理的，其实现方式和其他OS没有多大区别，都是由消息、消息队列（先进先出）、消息管理（负责分发消息）组成。
 * 我们只需要定义消息内容、发送消息，然后用BroadcastReceiver接受并处理消息，其他都由底层来负责。
 * Android系统中消息的分类
 * 1 NormalBroadcasts
 * 由系统向所有符合条件的Receiver发送。严格的说，Receiver接收到广播的顺序是随即的，但因为时间差很小，可以大致上认为是同时收到。
 * 
 * 2 OrderedBroadcasts
 * 按照顺序，1次发送给1个Receiver。接收到消息的Receiver，将消息发送给下一个Receiver，也可以取消消息发送。
 * 
 * 
 * BroadcastReceiver
 * android.content.BroadcastReceiver这个类是编码时，用来处理消息的基类。这个类使用时需要注册，既可以调用Context.registerReceiver()注册，也可以在AndroidManifest.xml中注册。
 * 如果不需要跨进程的广播，可以使用本类加android.support.v4.content.LocalBroadcastManager类来得到更有效率的实现方式，并且不用考虑广播权限。
 * 安装程序时，系统会去注册程序定义的BroadcastReceiver。系统启动后消息管理发送广播时，会挑选符合的BroadcastReceiver，然后将他们实例化并调用onReceive()方法，方法返回后BroadcastReceiver对象被回收。
 * 
 */
public class Android四大组件之BroadcastReceiver extends Activity {
	
	/**
	 * 使用BroadcastReceiver接收系统广播
	 */
	public void AboutBroadcastReceiver() {
//		1 新建一个类并继承于BroadcastReceiver，然后在AndroidManifest.xml中注册。
/*		<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> --申请权限
		<receiver android:name=".BroadcastReceiverClassName" > --BroadcastReceiver的实现类名
	        <intent-filter android:priority="1000"> --BroadcastReceiver的优先级，1000最高，一般系统使用负数，我们使用正数。
	            <action android:name="android.intent.action.BOOT_COMPLETED" /> --接收系统启动完成的Action
	        </intent-filter>
        </receiver>*/
		
		class MyBroadcastReceiver extends BroadcastReceiver {
			
//			2 实现onReceive()方法，本方法在接收广播时被调用。本方法中只能进行同步操作，并且时间不能过长（否则会出现ANR错误）。
//			若要进行长时间的、或异步操作，应该调用Context.startService()启动服务。
			@Override
			public void onReceive(Context context, Intent intent) {
				if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
					
				}
				
//				若得到的是OrderedBroadcasts，可以取消下一次广播发送。
				this.abortBroadcast();
				
			}
		}

	}
	
	/**
	 * 发送自定义广播
	 * 
	 */
	public void AboutBroadcast() {
//		发送NormalBroadcasts
		this.sendBroadcast(new Intent("wangchao.lesson.broadcastaction.MyBroadcast"));
		this.sendBroadcast(new Intent("wangchao.lesson.broadcastaction.MyBroadcast"), "wangchao.lesson.permission.ReceiveMyBroadcast");
		
//		发送OrderedBroadcasts
		this.sendOrderedBroadcast(new Intent("wangchao.lesson.broadcastaction.MyBroadcast"), "wangchao.lesson.permission.ReceiveMyBroadcast");
		
	}
	
}